<?php namespace app\wechat\controller;

use houdunwang\route\Controller;
use houdunwang\wechat\WeChat;
use system\model\Keywords;
use system\model\Module;

/**
 * 微信通讯验证
 */
class Api extends Controller{
	public function __construct ()
	{
		//测试前准备：在中间件中进行Config::set('wechat')
		//验证微信通讯
		WeChat::valid();
	}

	//动作
	public function handler ()
	{
		//微信sdk：实例化hd中message类
		$instance = WeChat::instance( 'message' );
		//接收粉丝发送过来的消息，这个$content表示关键词
		$content  = $instance->Content;
        //文本回复，依照关键词查找对应的内容进行回复
		$this->parseKeywords($content);

		//处理默认回复
		//在config表中查找到wechat_system_response的值
		$wechat_system_response = \system\model\Config::find(1)->wechat_system_response;

		//将数据转为数组格式
		$wechat_system_response = json_decode($wechat_system_response,true);

		//判断是否是关注事件
		if ($instance->isSubscribeEvent())
		{
			//向用户回复消息
			$instance->text($wechat_system_response['welcome']);
		}

//		$instance->text($wechat_system_response['default_message']);
		//获取默认回复消息的内容default_message
		//如果默认回复消息是个关键字时，当你随意输入时，回复该关键词对应的内容
		$this->parseKeywords($wechat_system_response['default_message']);
		file_put_contents('./sun.php',$instance);
		//消息管理模块
		$button = WeChat::instance('button');
		//关注用户扫描二维码事件
		if ($button->isClickEvent()) {

			$this->parseKeywords($instance->EventKey);
		}

		//默认消息回复给粉丝
		$instance->text($wechat_system_response['default_message']);

	}

	//$content：Keywords表中的关键字
	//查找方法：
	//     1.在Keywords表中根据$content查找到对应的模块module
	//     2.在moudle表中的module查找出其对应是否是系统模块
	//     3.拼接路径，实例化对应模块，调用其handler方法
	protected function parseKeywords($content)
	{
//		$instance = WeChat::instance( 'message' );
//		$instance->text($content);
		//在数据库Keywords中根据$content该关键词查找的相应的那条数据
		$module = Keywords::where( 'keywords' , $content )->first();
		//如果（if）找到数据库上有该字段值
		if ( $module )
		{
//			$instance->text('hdhdhdhd');
			//在数据库Module找到$module_is_system字段，判断其是否是系统的模块
			$module_is_system = Module::where( 'module_name' , $module[ 'module' ] )->pluck('module_is_system');
			//(new \module\base\system\Processor())->handler();
			//该程序包含两个模块，对应连个微信的处理程序
			//$class = "module\base\system\Processor"
			//$class = "addons\pic\system\Processor";
			$class = ( $module_is_system == 1 ? 'module' : 'addons' ) . '\\' . $module[ 'module' ] . '\system\Processor';
			//调用module\base\system\Processor中的handler函数，[$module['module_id']]是传递给handler函数的参数
			return call_user_func_array( [ new $class , 'handler' ] , [$module['module_id']] );
		}
	}
}
